package com.lx.main;

import com.lx.entity.Book;
import com.lx.entity.Manager;
import com.lx.util.BookUtil;
import com.lx.util.ManagerUtil;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;

/**
 * @author c先生
 * @date 2022年04月11日 下午 7:35:20
 * @describe
 * 书籍管理系统
 * 1.注册功能(使用对象的序列化和反序列化实现)
 * 2.登录功能(使用对象的反序列化实现)
 * 3.展示书籍信息(按照书籍类型进行分类展示)
 *   要求：使用HashMap存储书籍信息；key(String) 存储书籍的类型，value(ArrayList<Book>)；存储书籍的集合
 *       Book属性：书籍编号，书籍名称，书籍作者，书籍价格，书籍简介，书籍出版时间，书籍出版社
 * 4.根据出版社名称查询旗下所有的出版书籍信息
 * 5.根据书籍作者查询旗下的所有书籍信息
 * 6.根据书籍名称模糊查询对应的书籍信息(输入  三  展示  三国演义  三国志)
 * 7.新增一本书籍信息(如果书籍对应的类型存在则存储在对应的value中，如果不存在则新建一组key  value进行存储)
 * 8.根据书籍名称修改书籍信息(要求：修改前展示书籍对应信息)
 * 9.根据书籍名称删除对应书籍信息
 */

public class BookUI {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ManagerUtil managerUtil = new ManagerUtil();
        BookUtil bookUtil = new BookUtil();
        boolean flag = true;
        while (flag) {
            System.out.println("1、注册");
            System.out.println("2、登录");
            switch (sc.nextInt()){
                case 1 :
                    System.out.println("请输入管理者姓名：");
                    String name  = sc.next();
                    List<Manager> allManagers = managerUtil.getAllManagers();
                    boolean flag1 = false;
                    if(allManagers == null){
                        allManagers = new ArrayList<Manager>();
                    }
                    for (Manager manager : allManagers) {
                        if(manager != null){
                            if(manager.getManagerName().equals(name)){
                                flag1 = true;
                                break;
                            }
                        }
                    }
                    if(flag1){
                        System.out.println("该用户已经存在！");
                        break;
                    }else {
                        System.out.println("请输入密码：");
                        String password = sc.next();
                        Manager manager = new Manager(name,password);
                        allManagers.add(manager);
                    }
                    if(managerUtil.regManager(allManagers)){
                        System.out.println("注册成功！");
                    }else {
                        System.out.println("注册失败！");
                    }
                    System.out.println("是否继续？（y/n）");
                    switch (sc.next()){
                        case "y" :
                            flag = true;
                            break;
                        case "n" :
                            flag = false;
                            break;
                    }
                    break;
                case 2 :
                    int count = 2;
                    while (count>=0){
                        System.out.println("请输入姓名：");
                        String name1 = sc.next();
                        System.out.println("请输入密码：");
                        String password1 = sc.next();
                        boolean b = managerUtil.login(name1,password1);
                        if(b){//登录成功，进入二级页面
                            System.out.println("登录成功");
                            System.out.println("欢迎书籍管理系统");
                            while (flag){
                                System.out.println("1、展示所有书籍信息");
                                System.out.println("2、查询指定出版社的所有出版书籍信息");
                                System.out.println("3、根据作者查询旗下所有书籍信息");
                                System.out.println("4、根据书籍名称模糊查询对应的书籍信息");
                                System.out.println("5、新增一本书籍");
                                System.out.println("6、根据书籍名称修改书籍信息");
                                System.out.println("7、根据书籍名称删除对应书籍信息");
                                switch (sc.nextInt()){
                                    case 1 :
                                        bookUtil.showAllBook();
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 2 :
                                        System.out.println("所有出版社如下：");
                                        HashSet<String> allPublisher = bookUtil.findAllPublisher();
                                        for (String s : allPublisher) {
                                            System.out.print(s+"\t");
                                        }
                                        System.out.println();
                                        System.out.println("请输入出版社名称");
                                        bookUtil.findBookByPublisher(sc.next());
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 3 :
                                        System.out.println("请输入你要查询的作者姓名：");
                                        bookUtil.findBookByAuthor(sc.next());
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 4 :
                                        System.out.println("请输入你要查询的书籍名：");
                                        bookUtil.findBookInfo(sc.next());
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 5 :
                                        System.out.println("请输入书籍编号");
                                        Integer id = sc.nextInt();
                                        System.out.println("请输入书籍名称");
                                        String name2 = sc.next();
                                        System.out.println("请输入书籍作者");
                                        String author = sc.next();
                                        System.out.println("请输入书籍价格");
                                        Double price = sc.nextDouble();
                                        System.out.println("请输入书籍简介");
                                        String intro = sc.next();
                                        System.out.println("请输入书籍出版时间(年 月 日)");
                                        LocalDate time = LocalDate.of(sc.nextInt(), sc.nextInt(), sc.nextInt());
                                        System.out.println("请输入书籍出版社");
                                        String publisher = sc.next();
                                        Book book = new Book(id,name2,author,price,intro,time,publisher);
                                        System.out.println("请输入书籍类型");
                                        if(bookUtil.addBook(sc.next(),book)){
                                            System.out.println("添加成功！");
                                        }else {
                                            System.out.println("添加失败！");
                                        }
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 6 :
                                        System.out.println("请输入书籍名：");
                                        Book book1 = bookUtil.findBookByName(sc.next());
                                        if(book1 != null){
                                            System.out.println(book1.toString());
                                            System.out.println("请输入书籍编号");
                                            book1.setBookId(sc.nextInt());
                                            System.out.println("请输入书籍名称");
                                            book1.setBookName(sc.next());
                                            System.out.println("请输入书籍作者");
                                            book1.setBookAuthor(sc.next());
                                            System.out.println("请输入书籍价格");
                                            book1.setBookPrice(sc.nextDouble());
                                            System.out.println("请输入书籍简介");
                                            book1.setBookIntroduce(sc.next());
                                            System.out.println("请输入书籍出版时间(年 月 日)");
                                            LocalDate time1 = LocalDate.of(sc.nextInt(), sc.nextInt(), sc.nextInt());
                                            book1.setBookTime(time1);
                                            System.out.println("请输入书籍出版社");
                                            book1.setBookPublisher(sc.next());
                                        }else {
                                            System.out.println("该书不存在！");
                                        }
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                    case 7 :
                                        System.out.println("请输入书籍名：");
                                        if(bookUtil.deleteBook(sc.next())){
                                            System.out.println("删除成功！");
                                        }else {
                                            System.out.println("删除失败！");
                                        }
                                        System.out.println("是否继续？（y/n）");
                                        switch (sc.next()){
                                            case "y" :
                                                flag = true;
                                                break;
                                            case "n" :
                                                flag = false;
                                                System.exit(0);
                                        }
                                        break;
                                }
                            }
                        }else {//登录失败，有三次登录机会
                            System.out.println("密码输入错误，你还有"+ count +"次机会");
                            count--;
                        }
                        if(count<0){
                            System.exit(0);
                        }else {
                            continue;
                        }
                    }
                    break;
            }
        }
    }
}
